package Shape;

public class Shape {
    public void draw(){
        System.out.println("画图形！！");
    }

    public static void drawShapes2(){
        Shape[]shapes={new Cycle(),new Rect(),new Cycle(),new Rect(),new Flower()};
        for (Shape shape:shapes
             ) {
            shape.draw();
        }
    }
    //可扩展能力更加强
    //如果要新增加一种新的形状，使用多态的方式代码改动成本也比较低
    public static void drawShape(){
        Rect rect=new Rect();
        Cycle cycle=new Cycle();
        Flower flower=new Flower();
        String[]shapes={"cycle","rect","cycle","rect","flower"};
        for (String shape:shapes
             ) {
            if(shape.equals("cycle")){
                cycle.draw();
            } else if (shape.equals("rect")) {
                rect.draw();
            } else if (shape.equals("flower")) {
                flower.draw();
            }
        }
    }
}



//使用多态的好处：降低圈复杂度，避免使用大量的if-else
//什么是圈复杂度？？
//是一种描述一段代码复杂程度的方式，一段代码如果平复秩序，那么久比较容易理解
//如果使用了很多的条件分支或者循环语句，就认为理解起来更加复杂
//
//简单粗暴的计算：一段代码中的条件语句和循环语句出现的个数，这个个数就成为圈复杂度
//如果一个方法的全复杂度太高，就要考虑重构（可以）

//不同公司对代码的圈复杂度要求不一样，一般不超10
